<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
function imgName_p() {
	$date = date("Ymd", time());
	$file = input("name") . "_" . input("telphone");
	$personalpic = Request::file('personalpic');
	$savename = $date . DIRECTORY_SEPARATOR . $file . '.' . pathinfo($personalpic->getInfo("name"), PATHINFO_EXTENSION);
	return $savename;
}
function imgName_da() {
	$date = date("Ymd", time());
	$file = input("name") . "_" . input("telphone");
	$doctorpica = Request::file('doctorpica');
	$savename = $date . DIRECTORY_SEPARATOR . $file . '.' . pathinfo($doctorpica->getInfo("name"), PATHINFO_EXTENSION);
	return $savename;
}
function imgName_db() {
	$date = date("Ymd", time());
	$file = input("name") . "_" . input("telphone");
	$doctorpicb = Request::file('doctorpicb');
	$savename = $date . DIRECTORY_SEPARATOR . $file . '.' . pathinfo($doctorpicb->getInfo("name"), PATHINFO_EXTENSION);
	return $savename;
}
function imgName_l() {
	$date = date("Ymd", time());
	$file = input("name") . "_" . input("telphone");
	$license = Request::file('license');
	$savename = $date . DIRECTORY_SEPARATOR . $file . '.' . pathinfo($license->getInfo("name"), PATHINFO_EXTENSION);
	return $savename;
}
//压缩文件
function zip($files) {
	// $files = array('upload/qrcode/1/100001.jpg', 'upload/qrcode/1/100002.jpg');
	$zipName = '../public/uploads/' . time() . '.zip';
	// $zipName = '../public/uploads/download/personpic/tes.zip';
	$zip = new \ZipArchive; //使用本类，linux需开启zlib，windows需取消php_zip.dll前的注释
	/*
	         * 通过ZipArchive的对象处理zip文件
	         * $zip->open这个方法如果对zip文件对象操作成功，$zip->open这个方法会返回TRUE
	         * $zip->open这个方法第一个参数表示处理的zip文件名。
	         * 这里重点说下第二个参数，它表示处理模式
	         * ZipArchive::OVERWRITE 总是以一个新的压缩包开始，此模式下如果已经存在则会被覆盖。
	         * ZIPARCHIVE::CREATE 如果不存在则创建一个zip压缩包，若存在系统就会往原来的zip文件里添加内容。
	         *
	         * 这里不得不说一个大坑。
	         * 我的应用场景是需要每次都是创建一个新的压缩包，如果之前存在，则直接覆盖，不要追加
	         * so，根据官方文档和参考其他代码，$zip->open的第二个参数我应该用 ZipArchive::OVERWRITE
	         * 问题来了，当这个压缩包不存在的时候，会报错：ZipArchive::addFile(): Invalid or uninitialized Zip object
	         * 也就是说，通过我的测试发现，ZipArchive::OVERWRITE 不会新建，只有当前存在这个压缩包的时候，它才有效
	         * 所以我的解决方案是 $zip->open($zipName, \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE)
	         *
	         * 以上总结基于我当前的运行环境来说
*/
	if ($zip->open($zipName, \ZIPARCHIVE::OVERWRITE || \ZIPARCHIVE::CREATE) !== TRUE) {
		exit('无法打开文件，或者文件创建失败');
	}
	foreach ($files as $val) {
		//$attachfile = $attachmentDir . $val['filepath']; //获取原始文件路径
		if (file_exists($val)) {
			//addFile函数首个参数如果带有路径，则压缩的文件里包含的是带有路径的文件压缩
			//若不希望带有路径，则需要该函数的第二个参数
			$zip->addFile($val, basename($val));
			// $zip->addFile($val, basename($val)); //第二个参数是放在压缩包中的文件名称，如果文件可能会有重复，就需要注意一下
		} else {
			exit('图片文件' . $val . "不存在");
		}
	}
	$zip->close(); //关闭
	if (!file_exists($zipName)) {
		exit("无法找到文件"); //即使创建，仍有可能失败
	}

	//如果不要下载，下面这段删掉即可，如需返回压缩包下载链接，只需 return $zipName;
	header("Cache-Control: public");
	header("Content-Description: File Transfer");
	header('Content-disposition: attachment; filename=' . basename($zipName)); //文件名
	header("Content-Type: application/zip"); //zip格式的
	header("Content-Transfer-Encoding: binary"); //告诉浏览器，这是二进制文件
	header('Content-Length: ' . filesize($zipName)); //告诉浏览器，文件大小
	@readfile($zipName);
	unlink($zipName);
}